home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / Aminet / docs / misc / rusdevdocs.lha / mui next >
Text File  |  1999-05-16  |  44KB  |  1,090 lines

  1.  
  2.     Ïðîãðàììèðîâàíèå MUI äëÿ íà÷èíàþùèõ, âåðñèÿ 2.1 beta
  3.  
  4.     (C) 1999 RDC
  5.  
  6.  
  7. 1) ×åì îòëè÷àåòñÿ MUI îò âñåõ ïðî÷èõ èíòåðôåéñíûõ ñèñòåì,
  8.    èëè ïî÷åìó íåò ñìûñëà äåëàòü ñîôò íå ïîä MUI ;-)
  9.  
  10.    Åñòü äâà òèïà èíòåðôåéñíûõ ñèñòåì. Ê ïåðâîìó îòíîñèòñÿ
  11. íèçêîóðîâíåâûé Intuition, áîëåå âûñîêîóðîâíåâûé Gadtools,
  12. à òàêæå èíòåðôåéñû MacOS è Windows.  Ïðîãðàììèðîâàíèå ýòèõ èíòåðôåéñîâ
  13. ñâîäèòñÿ ê êðàéíå òðóäî¸ìêîé çàäà÷å ïîäáîðà êîîðäèíàò è ðàçìåðîâ
  14. êàæäîãî ýëåìåíòà.  Áîëüøèíñòâî ïðîãðàìì, íàïèñàííûõ ïîä ïîäîáíûå
  15. èíòåðôåéñû, èìåþò íàáîð êîíñòàíò, îïðåäåëÿþùèõ êîîðäèíàòû è ðàçìåðû.
  16. Òàêèå ïðîãðàììû ìîãóò ðàáîòàòü òîëüêî ñî øðèôòîì îïðåäåë¸ííîãî ðàçìåðà
  17. è ñ îïðåäåë¸ííûì ÿçûêîì.  Ïîïûòêè èçìåíèòü øðèôò èëè ëîêàëèçîâàòü
  18. ïðîãðàììó ïðèâîäÿò ê òîìó, ÷òî íàäïèñè íà÷èíàþò âûëåçàòü çà ïðåäåëû
  19. ýëåìåíòîâ.  Íåêîòîðûå ïðîãðàììû óìåþò ìàñøòàáèðîâàòü èíòåðôåéñ öåëèêîì
  20. â çàâèñèìîñòè îò ðàçìåðà øðèôòà - íî îïÿòü æå, íå ó÷èòûâàþò òî, ÷òî
  21. øèðèíà íàäïèñè ïðîïîðöèîíàëüíûì øðèôòîì çàâèñèò íå ñòîëüêî îò ðàçìåðà
  22. øðèôòà, ñêîëüêî îò ñîäåðæàíèÿ íàäïèñè.  Îñîáî óìíûå ïðîãðàììû
  23. ó÷èòûâàþò è ýòî - â ðåçóëüòàòå, ñòîèò íàäïèñè íà âñåãî ëèøü îäíîé
  24. êíîïêå â ãîðèçîíòàëüíîì ðÿäó óâåëè÷èòüñÿ ðàçà â äâà, êàê ðàñøèðÿåòñÿ â
  25. äâà ðàçà âñ¸ îêíî (íàáëþäàë ñàìîëè÷íî â ðóñèôèöèðîâàííîì TERM).
  26.    Òåïåðü ïîñìîòðèì ñ ïîçèöèè ïðîãðàììèñòà.  Îí âûíóæäåí âðó÷íóþ
  27. ïîäáèðàòü ýòè ïðåñëîâóòûå êîîðäèíàòû.  Ðàíüøå ýòî äåëàëîñü âîîáùå ÷óòü
  28. ëè íå íà ëèñòå áóìàãè â êëåòêó.  Ïîçæå ïîÿâèëèñü ïðîãðàììû òèïà
  29. GadToolsBox, ïîçâîëÿþùèå ðàññòàâëÿòü ýëåìåíòû ìûøêîé - íî è ýòî ðàáîòà
  30. íå äëÿ ñëàáîíåðâíûõ.  Ïîëíàÿ ïåðåãðóïïèðîâêà èíòåðôåéñà èç-çà
  31. äîáàâëåíèÿ ïàðû êíîïîê ðàâíîçíà÷íà ïåðåäåëûâàíèþ åãî çàíîâî.  Âñ¸
  32. âðåìÿ ïðèõîäèòñÿ ïðèêèäûâàòü, íàñêîëüêî ýñòåòè÷íî ñìîòðèòñÿ èíòåðôåéñ.
  33. Íå ïîëó÷èëîñü ëè, ÷òî èíòåðâàë ìåæäó ýòèìè äâóìÿ êíîïêàìè ÷óòü ìåíüøå,
  34. ÷åì ìåæäó òåìè?
  35.    Êðîìå òîãî, óïðàâëÿþùèìè ýëåìåíòàìè èíòåðôåéñà ñîáñòâåííî èíòåðôåéñ
  36. íå îãðàíè÷èâàåòñÿ. Êðîìå íèõ, åñòü åù¸ è ýëåìåíòû îôîðìëåíèÿ - âñÿêèå
  37. íàäïèñè, ðàìî÷êè, êàðòèíî÷êè. Èõ óæå íóæíî ðèñîâàòü â îêíå âðó÷íóþ.
  38. Ïðè÷¸ì - êàæäûé ðàç, êîãäà ïðèõîäèò IDCMP-ñîîáùåíèå ñ ïðîñüáîé
  39. ïåðåðèñîâàòü îêíî... Ïðèëè÷íàÿ ïðîãðàììà äîëæíà îáåñïå÷èâàòü þçåðó
  40. âîçìîæíîñòü ïîìåíÿòü ðàçìåð îêíà - à äëÿ ýòîãî ïðèä¸òñÿ ïðè ïîëó÷åíèè
  41. ñîîáùåíèÿ î íîâîì ðàçìåðå ïåðåñ÷èòûâàòü ïîëîæåíèå è ðàçìåð ðÿäà
  42. ýëåìåíòîâ. È íàêîíåö, íóæíî îáÿçàòåëüíî îïðåäåëÿòü ðàçìåðû ðàìêè îêíà,
  43. ÷òîáû ïðè ðàçíûõ ðàçìåðàõ ýëåìåíòû íå «íàïîëçàëè» íà íå¸.
  44.  
  45.    Âòîðîé òèï èíòåðôåéñíûõ ñèñòåì - ñèñòåìû ñ àâòîìàòè÷åñêîé
  46. êîìïîíîâêîé (automatic layout).  Ê ýòîìó êëàññó îòíîñÿòñÿ MUI,
  47. ClassAct, BGUI, GTLayout, à òàêæå Motif/Lesstif ïîä UNIX.
  48.    Â ýòîì ñëó÷àå ïîíÿòèÿ «êîîðäèíàòû è ðàçìåðû» íåò âîîáùå.
  49. Ïðîãðàììèñò ãðóïïèðóåò ýëåìåíòû èíòåðôåéñà, ñâÿçûâàÿ èõ ìåæäó ñîáîé è
  50. îïðåäåëÿÿ âçàèìîñâÿçè, à èíòåðôåéñíàÿ áèáëèîòåêà óæå ñàìîñòîÿòåëüíî
  51. (ïðè êàæäîì èçìåíåíèè ïîëüçîâàòåëåì ðàçìåðà îêíà!) âû÷èñëÿåò, êàêèå
  52. êîîðäèíàòû è ðàçìåðû áóäóò ó òîãî èëè èíîãî ýëåìåíòà.  Ïðè ýòîì â
  53. çàâèñèìîñòè îò ðàçìåðîâ êàðòèíîê è íàäïèñåé èíòåðôåéñ ìîæåò áûòü
  54. çíà÷èòåëüíî ïåðåãðóïïèðîâàí.  Äëÿ òàêîãî ïîäõîäà áîëåå íå òðåáóþòñÿ
  55. êîíñòðóêòîðû èíòåðôåéñîâ è ìó÷èòåëüíûé ïîäáîð êîîðäèíàò.
  56.    Ïåðå÷èñëåííûå èíòåðôåéñû òîæå íå ðàâíîçíà÷íû (Motif â äàííîì
  57. êîíòåêñòå ðàññìàòðèâàòüñÿ íå áóäåò, õîòÿ ïî âîçìîæíîñòÿì îí âî ìíîãîì
  58. ïîõîæ íà MUI).  MUI îòëè÷àåòñÿ ðÿäîì ñâîéñòâ, ïîçâîëÿþùèõ çíà÷èòåëüíî
  59. óïðîñòèòü ïðîãðàììó, óâåëè÷èâàÿ å¸ âîçìîæíîñòè.  Ïðîãðàììèñòó ïîä MUI
  60. íå íóæíî çàäóìûâàòüñÿ î âñÿêîãî ðîäà ïîäëîæêàõ - äîñòàòî÷íî óêàçàòü
  61. ôëàã òèïà «çäåñü áóäåò ïîäëîæêà, ïðåäíàçíà÷åííàÿ äëÿ êíîïêè».  À óæå
  62. êàêàÿ ïîäëîæêà äîëæíà áûòü ó êíîïêè, ðåøàåò þçåð â MUI prefs.  Äëÿ
  63. ðåàëèçàöèè drag'n'drop äîñòàòî÷íî óêàçàòü, êàêèå îáúåêòû ìîæíî òàñêàòü
  64. è íà êàêèå îáúåêòû èõ ìîæíî êèäàòü - è ñîâñåì íå íóæíî âðó÷íóþ
  65. èçîáðàæàòü ïðîöåññ dnd, êàê ýòî ñäåëàíî â òåõ æå SnoopDOS èëè DOpus5.
  66. Ìîæíî äàæå ïåðåòàñêèâàòü ýëåìåíòû èíòåðôåéñà, äèíàìè÷åñêè ìåíÿÿ èõ
  67. ðàññòàíîâêó â îêíå - è ïðèëîæåíèå íå äîëæíî çàáîòèòüñÿ îá ýòîì -
  68. õîðîøèì ïðèìåðîì ÿâëÿåòñÿ IBrowse.  MUI ïîçâîëÿåò äèíàìè÷åñêè óáðàòü
  69. èëè âîññòàíîâèòü òîò èëè èíîé ýëåìåíò èëè ãðóïïó ýëåìåíòîâ - è îêíî
  70. áóäåò òóò æå ïåðåðèñîâàíî, à ïðè íåîáõîäèìîñòè äàæå èçìåíèò ðàçìåð.  È
  71. íàêîíåö, ñàìîå èíòåðåñíîå ñâîéñòâî - MUI ïîçâîëÿåò óñòàíàâëèâàòü ñâÿçè
  72. ìåæäó ýëåìåíòàìè.  Íàïðèìåð, èíòåðôåéñ âèäà - ãàëî÷êà, óñòàíîâêà
  73. êîòîðîé îçíà÷àåò îòêðûòèå îêíà, à óáèðàíèå å¸ èëè íàæàòèå íà êíîïêó
  74. çàêðûòèÿ âûçûâàåò àâòîìàòè÷åñêîå çàêðûòèå ýòîãî îêíà - äåëàåòñÿ
  75. ñðåäñòâàìè ñàìîãî MUI.  Íóæíî âñåãî ëèøü óêàçàòü ñâÿçè, è ñ ýòîãî
  76. ìîìåíòà MUI áóäåò ñàì îáðàáàòûâàòü äàííóþ ñèòóàöèþ, à ïðîãðàììà äàæå
  77. íå áóäåò ïîëó÷àòü óïðàâëåíèÿ ïî ïîâîäó ýòîãî ñîáûòèÿ - ðàçóìååòñÿ,
  78. åñëè îíà ýòîãî íå çàõî÷åò.
  79.    Ýëåìåíòû èíòåðôåéñà MUI íå èñ÷åðïûâàþòñÿ íàáîðîì èìåþùèõñÿ.  Èõ
  80. ìîæíî äåëàòü ñàìîìó - òàê íàçûâàåìûå custom classes.  Íàïðèìåð,
  81. ñóùåñòâóåò ýëåìåíò èíòåðôåéñà HTMLview, ôàêòè÷åñêè ïðåäñòàâëÿþùèé
  82. ñîáîé Web-áðàóçåð.  Óêàæåøü åìó âåá-ñòðàíèöó - îí å¸ òóò æå ïîêàæåò
  83. âìåñòå ñî âñåìè êàðòèíêàìè è àíèìàöèÿìè, è ïîçâîëèò ïðîêðó÷èâàòü
  84. òóäà-ñþäà, êîïèðîâàòü òåêñò â clipboard.
  85.  
  86.  
  87. 2) Îáùàÿ êîíöåïöèÿ MUI.
  88.  
  89.    MUI ïîñòðîåí íà BOOPSI - Basic Object-Oriented Programming System
  90. for Intuition.  Èíòåðôåéñ BOOPSI ïîÿâèëñÿ åù¸ â OS 2.0.  Âñïîìíèòå
  91. Palette Prefs - êðóã âûáîðà öâåòà è ñëàéäåð ñ ãðàäèåíòîì ïðåäñòàâëÿþò
  92. ñîáîé BOOPSI-îáúåêòû.  Åñëè Âû èìååòå ïîíÿòèå î BOOPSI è âîîáùå îá
  93. îáúåêòíî-îðèåíòèðîâàííîì ïîäõîäå - ñëåäóþùèé ïóíêò ìîæåòå íå ÷èòàòü.
  94.  
  95.  
  96. 3) Îáúåêòíî-îðèåíòèðîâàííûé ïîäõîä.
  97.  
  98.    ÎΠïîäõîä ê ïðîãðàììèðîâàíèþ áûë ðàçðàáîòàí ïàðó äåñÿòêîâ ëåò
  99. íàçàä, ïðîÿâèâøèñü â òàêèõ ÿçûêàõ ïðîãðàììèðîâàíèÿ, êàê Simula,
  100. SmallTalk è C++.  Ðàññìîòðèì îñíîâíûå ïîíÿòèÿ ÎÎÏ â êîíòåêñòå BOOPSI:
  101.  
  102.    1) Êëàññ.  Ôàêòè÷åñêè ýòî áèáëèîòåêà, ïðåäñòàâëÿþùàÿ ñîáîé
  103.       îïðåäåë¸ííûé ìàøèííûé êîä.  Â íàøåì ñëó÷àå îíà ðåàëèçóåò òîò èëè
  104.       èíîé ýëåìåíò èíòåðôåéñà.
  105.    2) Îáúåêò.  Ñîáñòâåííî ýëåìåíò èíòåðôåéñà.  Ïðåäñòàâëÿåò ñîáîé
  106.       íå÷òî, èäåíòèôèöèðóåìîå óíèêàëüíûì 32-áèòíûì ÷èñëîì (ôàêòè÷åñêè,
  107.       ïðåäñòàâëÿþùèì ñîáîé óêàçàòåëü íà ñòðóêòóðó äàííûõ).
  108.    3) Ìåòîä.  Ôóíêöèÿ áèáëèîòåêè, ïîçâîëÿþùàÿ ñäåëàòü òî èëè èíîå
  109.       äåéñòâèå ñ îáúåêòîì - ê ïðèìåðó, âûòàùèòü îêíî íà ïåðåäíèé ïëàí.
  110.    4) Àòðèáóò.  Ñâîéñòâî îáúåêòà - íàïðèìåð, íàäïèñü íà êíîïêå.
  111.       Ýòî ñâîéñòâî ìîæíî êàê ñ÷èòûâàòü, òàê è ìåíÿòü.  Äåëàåòñÿ ýòî ñ
  112.       ïîìîùüþ ìåòîäîâ «ñ÷èòàòü» è «óñòàíîâèòü».
  113.  
  114.    Êàæäûé îáúåêò ÿâëÿåòñÿ îáúåêòîì îïðåäåë¸ííîãî êëàññà.  Êëàññ
  115. ïðåäîñòàâëÿåò íàáîð àòðèáóòîâ è ìåòîäîâ, èìåþùèõ îòíîøåíèå ê äàííîìó
  116. îáúåêòó.  Ê ïðèìåðó, ó ëþáîãî îêíà åñòü àòðèáóò «çàãîëîâîê îêíà» è
  117. ìåòîä «óáðàòü îêíî íà çàäíèé ïëàí».
  118.    Îáúåêòû ìîæíî äèíàìè÷åñêè ñîçäàâàòü è óíè÷òîæàòü. Ïîêà îáúåêò
  119. ñóùåñòâóåò, íàä íèì ìîæíî âûïîëíÿòü ìåòîäû, ïðèñóùèå êëàññó ýòîãî
  120. îáúåêòà, è ñ÷èòûâàòü/ìåíÿòü àòðèáóòû, ïðèñóùèå êëàññó. Ðÿä àòðèáóòîâ
  121. ìîæíî èíèöèàëèçèðîâàòü íóæíûìè çíà÷åíèÿìè ñðàçó ïðè ñîçäàíèè îáúåêòà.
  122. Ñîçäàíèå è óíè÷òîæåíèå îáúåêòà òîæå ÿâëÿþòñÿ âûïîëíåíèåì ìåòîäîâ.
  123.    Êëàññû îðãàíèçîâàíû â äåðåâî, ïîõîæåå íà äåðåâî äèðåêòîðèé
  124. èåðàðõè÷åñêîé ôàéëîâîé ñèñòåìû.  Òåì ñàìûì ðåàëèçóåòñÿ åù¸ îäèí ìîìåíò
  125. ÎÎ-ïîäõîäà - íàñëåäîâàíèå.  Ñóáêëàññû («ñóáäèðåêòîðèè») íàñëåäóþò âñå
  126. ìåòîäû è àòðèáóòû «ðîäèòåëüñêèõ» êëàññîâ (íàçûâàåìûõ ñóïåðêëàññàìè),
  127. ÷òî ïîçâîëÿåò íå ðåàëèçîâûâàòü â ñóáêëàññå çàíîâî óæå ñóùåñòâóþùèå
  128. âåùè.  Ôàêòè÷åñêè, ñóáêëàññû ÿâëÿþòñÿ êàê áû ÷àñòíûìè ñëó÷àÿìè
  129. ñóïåðêëàññîâ.  Ê ïðèìåðó, ñóáêëàññ «êàðòèíêà» íàñëåäóåò ó êëàññà
  130. «ïðÿìîóãîëüíàÿ îáëàñòü» àòðèáóò «ðàçìåð ïî ãîðèçîíòàëè».  Êëàññ
  131. «êàðòèíêà» íå áóäåò îòðàáàòûâàòü ñ÷èòûâàíèå ýòîãî àòðèáóòà - îí ïðîñòî
  132. ïåðåäàñò íåèçâåñòíóþ åìó îïåðàöèþ êëàññó «ïðÿìîóãîëüíàÿ îáëàñòü».
  133.  
  134.    Êàê âñ¸ ýòî «ñîîòíîñèòñÿ ñ ðåàëüíîñòüþ»? Â ïåðâóþ î÷åðåäü, ÎÎ
  135. ïîäõîä ïîçâîëÿåò çíà÷èòåëüíî óïðîñòèòü è óïîðÿäî÷èòü ïðîãðàììíûé
  136. èíòåðôåéñ.  Ïîñìîòðèòå íà èíòåðôåéñ Exec, Intuition è Graphics - ñîòíè
  137. âûçîâîâ äëÿ ñàìûõ ðàçíûõ öåëåé.  Äëÿ ðàáîòû ñ MUI äîñòàòî÷íî íå áîëåå
  138. äåñÿòêà.  Óïîðÿäî÷åíèå ñâîäèòñÿ, ê ïðèìåðó, ê òîìó, ÷òî äëÿ
  139. óíè÷òîæåíèÿ îáúåêòà åñòü îäèí åäèíñòâåííûé âûçîâ.  À âîâñå íå äåñÿòîê
  140. - çàêðûòü îêíî, çàêðûòü ýêðàí, çàêðûòü ôàéë, çàêðûòü äåâàéñ, çàêðûòü
  141. áèáëèîòåêó, îñâîáîäèòü ñåìàôîð, îñâîáîäèòü áàçó áèáëèîòåêè...
  142.  
  143.    Ñóùåñòâóþò äâà ïîäõîäà ê ÎÎÏ, óñëîâíî íàçîâ¸ì èõ «ñòàòè÷åñêèì» è
  144. «äèíàìè÷åñêèì».  Ïåðâûé, ïðèñóùèé C++, ïðåäñòàâëÿåò ñîáîé ÎÎÏ íà ýòàïå
  145. êîìïèëÿöèè.  ÎÎ-ïðîãðàììà, ñîäåðæàùàÿ ðàáîòó ñ îáúåêòàìè,
  146. êîìïèëèðóåòñÿ â îáúåêòíûé êîä, óæå íå ñîäåðæàùèé íèêàêèõ îáúåêòîâ.
  147. Äëÿ âñåãî âíåøíåãî ìèðà ýòî òàêàÿ æå ïðîãðàììà, êàê è íàïèñàííàÿ íà
  148. áåéñèêå èëè àññåìáëåðå - ðàçâå ÷òî áîëåå ìîíñòðîâàÿ è òîðìîçíóòàÿ.
  149. Êëàññû C++ íåëüçÿ ïðåäñòàâèòü â âèäå ðàçäåëÿåìûõ áèáëèîòåê.  Îíè
  150. îáÿçàòåëüíî ëèíêóþòñÿ ê ïðîãðàììå, óâåëè÷èâàÿ å¸ îáú¸ì íà ñîòíè
  151. êèëîáàéò è ìåãàáàéòû.  Ñîáñòâåííî, ïîñëåäñòâèÿ ýòîãî ïîäõîäà ìîæíî
  152. íàáëþäàòü ñåé÷àñ íà PC.
  153.    Äèíàìè÷åñêèé ïîäõîä, ïðèñóùèé SmallTalk è BOOPSI, ñâîäèòñÿ ê òîìó,
  154. ÷òî îáúåêòû äåéñòâèòåëüíî ñóùåñòâóþò è ïðåäîñòàâëÿþòñÿ îêðóæåíèåì.
  155. Ïðîãðàììà îïåðèðóåò ôóíêöèÿìè îêðóæåíèÿ äëÿ äîñòóïà ê íèì.  Â ýòîì
  156. ñëó÷àå ïðîãðàììà óæå íå ñîäåðæèò ëèøíåãî êîäà è ïîëó÷àåòñÿ
  157. èñêëþ÷èòåëüíî êîìïàêòíîé (âñïîìíèòå MUI Prefs - âñåãî 7 êèëîáàéò!).
  158.  
  159.  
  160. 4) Äîêóìåíòàöèÿ ïî MUI
  161.  
  162.    Îïèñàíèÿ MUI ïîõîæè íà îáû÷íûå autodocs, íî îíè îïèñûâàþò íå
  163. ôóíêöèè áèáëèîòåêè, à íàáîð àòðèáóòîâ è ìåòîäîâ, ïðèñóùèé êëàññó.
  164. Êàæäûé êëàññ èìååò ñâîïèñàíèå.
  165.  
  166.    Àòðèáóòû - ýòî êîíñòàíòû, íà÷èíàþùèåñÿ ñ «MUIA_».
  167.    Ìåòîäû - êîíñòàíòû, íà÷èíàþùèåñÿ ñ «MUIM_».
  168.  
  169.    Ïðè îïèñàíèè àòðèáóòîâ ìîæíî âñòðåòèòü ÷òî-òî òèïà [ISG].
  170. Ýòî ñî÷åòàíèå ñèìâîëîâ îïðåäåëÿåò, ìîæåò ëè äàííûé àòðèáóò ïðèìåíÿòüñÿ
  171. ïðè èíèöèàëèçàöèè îáúåêòà (Init), ìîæåò ëè èçìåíÿòüñÿ ïðîãðàììîé â
  172. ïðîöåññå ðàáîòû (Set), è ìîæåò ëè çíà÷åíèå àòðèáóòà áûòü ñ÷èòàííûì
  173. (Get).  Åñëè êàêîé-ëèáî âîçìîæíîñòè ó àòðèáóòà íåò, îíà çàìåíÿåòñÿ
  174. òî÷êîé.  Íàïðèìåð, àòðèáóò, êîòîðûé ìîæåò áûòü óñòàíîâëåí òîëüêî ïðè
  175. ñîçäàíèè îáúåêòà, îáîçíà÷àåòñÿ êàê [I..].
  176.  
  177.  
  178. 5) Ôóíêöèè, êîòîðûå íàì ïîòðåáóþòñÿ äëÿ íà÷àëà.
  179.  
  180.  - Ôóíêöèè muimaster.library:
  181.  
  182.    MUI_NewObject()     - ñîçäàíèå îáúåêòà. Èìååò äâà àðãóìåíòà - èìÿ
  183.                          êëàññà (ñòðîêà) è taglist.  Ïîñëåäíèé
  184.                          ïðåäñòàâëÿåò ñîáîé íàáîð ïàð ëîíãîâ, ïåðâûé
  185.                          èç êîòîðûõ - àòðèáóò, à âòîðîé - åãî
  186.                          çíà÷åíèå.  Ýòî ïîçâîëÿåò èíèöèàëèçèðîâàòü ðÿä
  187.                          àòðèáóòîâ íóæíûìè çíà÷åíèÿìè ñðàçó ïðè
  188.                          ñîçäàíèè îáúåêòà.  Ôóíêöèÿ âîçâðàùàåò
  189.                          óêàçàòåëü íà îáúåêò.
  190.  
  191.                          Âàæíîå çàìå÷àíèå: ïðè ñîçäàíèè ìíîæåñòâà
  192.                          îáúåêòîâ íàáîðîì ôóíêöèé MUI_NewObject()
  193.                          â èñïîëíÿåìîì ôàéëå ïîÿâèòñÿ ìíîæåñòâî
  194.                          îäèíàêîâûõ ñòðîê.  Â êîìïèëÿòîðå SAS/C 6.x
  195.                          åñòü îïöèÿ StringMerge (Compiler options â
  196.                          scopts), ïðåîáðàçóþùàÿ óêàçàòåëè íà âñå
  197.                          îäèíàêîâûå ñòðîêè â óêàçàòåëü íà îäíó.
  198.  
  199.    MUI_DisposeObject() - óíè÷òîæåíèå îáúåêòà.
  200.  
  201.  - ôóíêöèÿ amiga.lib (ëèíêóåìîé áèáëèîòåêè):
  202.  
  203.    DoMethod()          - âûïîëíåíèå ìåòîäà íàä îáúåêòîì. Àðãóìåíòû -
  204.                          óêàçàòåëü íà îáúåêò, êîä (íîìåð) ìåòîäà è
  205.                          ñïèñîê àðãóìåíòîâ ìåòîäà.
  206.  
  207.  - ìàêðîñû:
  208.  
  209.    MAKE_ID()           - ìàêðîñ äëÿ ïðåîáðàçîâàíèÿ ÷åòûð¸õ ñèìâîëîâ â
  210.                          îäèí ëîíã, ñîñòîÿùèé èç ýòèõ ÷åòûð¸õ áàéò.
  211.                          Â êîìïèëÿòîðå HisoftC 4.x âìåñòî ýòîãî ìîæíî
  212.                          èñïîëüçîâàòü ñèìâîëüíóþ êîíñòàíòó - ýòè æå
  213.                          ÷åòûðå ñèìâîëà â àïîñòðîôàõ.
  214.  
  215.    set()               - ìàêðîñ äëÿ óñòàíîâêè àòðèáóòà. Àðãóìåíòû -
  216.                          îáúåêò, àòðèáóò è åãî çíà÷åíèå.
  217.    get()               - ìàêðîñ äëÿ ñ÷èòûâàíèÿ àòðèáóòà. Àðãóìåíòû -
  218.                          îáúåêò, àòðèáóò è óêàçàòåëü íà ïåðåìåííóþ,
  219.                          êóäà ïîëîæèòü ðåçóëüòàò.
  220.  
  221.    Ìàêðîñû ðàçâ¸ðòûâàþòñÿ â SetAttrs() è GetAttr() ñîîòâåòñòâåííî.
  222.  
  223.  
  224. 6) Ñîçäàíèå ïðîñòåéøåãî èíòåðôåéñà.
  225.  
  226.    Èíòåðôåéñ ïðåäñòàâëÿåò ñîáîé äåðåâî îáúåêòîâ.  Íå ïóòàéòå åãî ñ
  227. óïîìÿíóòûì ðàíåå äåðåâîì êëàññîâ.  Êàæäûé îáúåêò ñîçäà¸òñÿ âûçîâîì
  228. ôóíêöèè MUI_NewObject().  ×òîáû ó îáúåêòà áûëè äî÷åðíèå îáúåêòû, â
  229. ñïèñêå òýãîâ óêàçûâàåòñÿ òýã Child, àðãóìåíòîì êîòîðîãî ÿâëÿåòñÿ
  230. óêàçàòåëü íà óæå ñîçäàííûé äî÷åðíèé îáúåêò.  Òàêèì îáðàçîì, ñîçäàíèå
  231. èíòåðôåéñà âåä¸òñÿ îò ñàìûõ «ìåëêèõ» îáúåêòîâ ê ñàìûì êðóïíûì.
  232. Êðóïíûå îáúåêòû ñîäåðæàò â ñåáå (òåððèòîðèàëüíî) áîëåå ìåëêèå è òàê
  233. äàëåå.  Îêíî ñîäåðæèò â ñåáå ãðóïïû îáúåêòîâ, òå ñîäåðæàò â ñåáå
  234. êíîïêè, åù¸ ãðóïïû è ò.ä. Â îáùåì ñëó÷àå äåðåâî îáúåêòîâ òèïè÷íîãî
  235. ïðèëîæåíèÿ âûãëÿäèò òàê:
  236.                                   ­¡¡¡¡¡¡¡¡¡¡¡¡¯
  237.                                   ¢ Ïðèëîæåíèå ¢
  238.                                   ¿¡¡¡¡¡¾¡¡¡¡¡¡´
  239.                                         ¢
  240.               ----¡¡¡¡¡¡¾¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡µ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  241.                         ¢               ¢                ¢
  242.                     ­¡¡¡¶¡¡¯        ­¡¡¡¶¡¡¯         ­¡¡¡¶¡¡¯
  243.                     ¢ Îêíî ¢        ¢ Îêíî ¢         ¢ Îêíî ¢
  244.                     ¿¡¡¡¾¡¡´        ¿¡¡¡¾¡¡´         ¿¡¡¡¾¡¡´
  245.                         ¢               ¢                ¢
  246.                    ­¡¡¡¡¶¡¡¡¯           :                :
  247.                    ¢ Ãðóïïà ¢
  248.                    ¿¡¡¡¡¾¡¡¡´  ê âîïðîñó î ïîëüçå ïñåâäîãðàôèêè ;)
  249.                         ¢
  250.          ­¡¡¡¡¡¡¡¡¡¡¡¡¾¡¶¡¡¡¡¡¡¡¡¾¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  251.          ¢            ¢          ¢                 ¢
  252.   ­¡¡¡¡¡¡¶¡¡¡¡¡¯  ­¡¡¡¶¡¡¡¡¯ ­¡¡¡¶¡¡¡¯         ­¡¡¡¶¡¡¡¡¯
  253.   ¢ Ïîëå ââîäà ¢  ¢ Ãðóïïà ¢ ¢ Òåêñò ¢         ¢ Ãðóïïà ¢
  254.   ¿¡¡¡¡¡¡¡¡¡¡¡¡´  ¿¡¡¡¾¡¡¡¡´ ¿¡¡¡¡¡¡¡´         ¿¡¡¡¾¡¡¡¡´
  255.                       ¢                            ¢
  256.        ----¡¡¡¡¡¾¡¡¡¡¡¶¡¡¡¡¡¯          ­¡¡¡¡¡¡¡¡¡¡¡µ¡¡¡¡¡¡¡-----
  257.                 ¢           ¢          ¢           ¢
  258.            ­¡¡¡¡¶¡¡¡¯   ­¡¡¡¶¡¡¯  ­¡¡¡¡¶¡¡¡¯   ­¡¡¡¶¡¡¡¡¯
  259.            ¢ Ñïèñîê ¢   ¢ Öèêë ¢  ¢ Ñïèñîê ¢   ¢ Ãðóïïà ¢
  260.            ¿¡¡¡¡¡¡¡¡´   ¿¡¡¡¡¡¡´  ¿¡¡¡¡¡¡¡¡´   ¿¡¡¡¾¡¡¡¡´
  261.                                                    ¢
  262.                                              ­¡¡¡¡¡¶¡¡¡¡¡¯
  263.                                              ¢           ¢
  264.                                          ­¡¡¡¶¡¡¡¡¯  ­¡¡¡¶¡¡¡¡¯
  265.                                          ¢ Êíîïêà ¢  ¢ Êíîïêà ¢
  266.                                          ¿¡¡¡¡¡¡¡¡´  ¿¡¡¡¡¡¡¡¡´
  267.  
  268.    Äëÿ óïðîùåíèÿ ýòîãî ïðîöåññà ïðèìåíÿåòñÿ ñëåäóþùèé ïîäõîä (äàëåå
  269. ïðèìåðû áóäóò ïðèâîäèòñÿ íà Ñè - íî ýòî íå çíà÷èò, ÷òî MUI ìîæåò
  270. ïðîãðàììèòüñÿ òîëüêî íà Ñè è íå íà ÷¸ì áîëüøå).  Ïèøåòñÿ ôóíêöèÿ,
  271. ñîçäàþùàÿ ñàìûé êðóïíûé îáúåêò - â ñëó÷àå MUI ýòî îáúåêò Application.
  272.  àðãóìåíòàõ óêàçûâàåòñÿ íàáîð å¸ àòðèáóòîâ, à òàêæå òýã SubWindow.
  273. Ïîñëå íåãî î÷åðåäíûì àðãóìåíòîâ MUI_NewObject() óêàçûâàåòñÿ åù¸ îäèí
  274. MUI_NewObject(), ñîçäàþùèé îêíî.  Â åãî àðãóìåíòàõ ñòàâèòñÿ Child è
  275. åù¸ âëîæåííûå MUI_NewObject(), ñîçäàþùèå âñ¸ îñòàëüíîå.  Óðîâåíü
  276. âëîæåíèÿ â ïðèíöèïå íå îãðàíè÷åí.  Â èòîãå Ñè ñêîìïèëèðóåò âñ¸ ýòî â
  277. ïîñëåäîâàòåëüíûé âûçîâ ôóíêöèé îò «ñàìûõ âëîæåííûõ» äî êîðíåâîé
  278. ôóíêöèè, ïîäñòàâëÿÿ ðåçóëüòàòû êàê àðãóìåíòû ôóíêöèÿì-«ðîäèòåëÿì».
  279.    Î÷åâèäíî, ÷òî ïðè ñîçäàíèè î÷åðåäíîãî îáúåêòà ìîæåò ñëó÷èòüñÿ
  280. îøèáêà - íåäîñòóïåí êëàññ ñ òàêèì èìåíåì, íåõâàòêà ïàìÿòè, äà ìàëî ëè
  281. ÷òî åù¸.  Â òàêîì ñëó÷àå MUI_NewObject() âåðí¸ò íóëü.  Äëÿ ýòîãî â MUI
  282. ïðåäóñìîòðåí ìåõàíèçì ñëåäóþùåãî âèäà - åñëè MUI_NewObject() ïîëó÷èë â
  283. êà÷åñòâå õîòÿ áû îäíîãî èç Child íóëü, îí âûïîëíÿåò
  284. MUI_DisposeObject() íàä íåíóëåâûìè Child è âîçâðàùàåò íóëü ñàì. Â
  285. èòîãå, îøèáêà âñåãäà îòñëåæèâàåòñÿ.
  286.  
  287.    Ðàçóìååòñÿ, ïðè ïåðâîì âçãëÿäå íà ýòîò ìåõàíèçì ìîæåò âîçíèêíóòü
  288. âïå÷àòëåíèå, ÷òî èñõîäíûé òåêñò â ðåçóëüòàòå áóäåò ñîäåðæàòü ìíîæåñòâî
  289. ìàëîâðàçóìèòåëüíûõ ôóíêöèé ñ êó÷åé íåïîíÿòíûõ ÷èñåë â êà÷åñòâå
  290. àðãóìåíòîâ.  Äëÿ òîãî, ÷òîáû ýòî íå ñëó÷èëîñü, MUI êîìïëåêòóåòñÿ
  291. íàáîðîì ìàêðîñîâ è êîíñòàíò, ðåàëèçóþùèé äîñòàòî÷íî óäîáíûé «ÿçûê
  292. îïèñàíèÿ èíòåðôåéñà».
  293.  
  294.    Object *app, *window1, *button1;
  295.    app = ApplicationObject,
  296.      MUIA_Application_Title      , "Ïðîãðàììà",
  297.      MUIA_Application_Version    , "$VER: Ïðîãðàììà 1.0 (äàòà)",
  298.      MUIA_Application_Copyright  , "(C) 1999 Ïðîãðàììèíã Êîìïýíè",
  299.      MUIA_Application_Author     , "Ïðîãðàììèñò",
  300.      MUIA_Application_Description, "Êðàòêîå îïèñàíèå ïðîãðàììû",
  301.      MUIA_Application_Base       , "ÐÅÊÑ.ÏÎÐÒ.ÏÐÎÃÐÀÌÌÛ",
  302.      SubWindow, window1 = WindowObject,
  303.        MUIA_Window_Title, "Ïðîãðàììà",
  304.        MUIA_Window_ID   , MAKE_ID('M','A','I','N'),
  305.        WindowContents, button1 = SimpleButton("Íàæìè ìåíÿ");
  306.      End,
  307.    End;
  308.  
  309.    Êàê âèäíî â ïðèâåä¸ííîì ïðèìåðå, âûçîâû ôóíêöèè MUI_NewObject() ñ
  310. ðàçëè÷íûìè âàðèàíòàìè èì¸í êëàññîâ ñâ¸ðíóòû â ìàêðîñû âèäà xxxObject,
  311. à çàâåðøàþùèå âûçîâ ôóíêöèè TAG_END è ñêîáêà îôîðìëåíû êàê ìàêðîñ End.
  312. Ìåæäó íà÷àëîì è çàâåðøåíèåì ôóíêöèè ðàçìåùàþòñÿ òýãè, ïðåäñòàâëÿþùèå
  313. ñîáîé èíèöèàëèçàöèþ àòðèáóòîâ è óêàçàíèå äî÷åðíèõ îáúåêòîâ.  Â èòîãå
  314. îïèñàíèå èíòåðôåéñà âåä¸òñÿ «ëåñåíêîé» - îáû÷íûé äëÿ Ñè ñòèëü
  315. ïðîãðàììèðîâàíèÿ.
  316.    ×àñòü èç ìàêðîñîâ ñîäåðæàò âñþ ôóíêöèþ ñðàçó - íàïðèìåð,
  317. ïðèâåä¸ííûé âûøå SimpleButton().  Â ýòîì ñëó÷àå End íå òðåáóåòñÿ.
  318.  
  319.    Èñïîëüçîâàòü ýòîò èíòåðôåéñ ìîæíî òîëüêî â òîì ñëó÷àå, åñëè â
  320. ðåçóëüòàòå åãî ñîçäàíèÿ ïåðåìåííàÿ app ñîäåðæèò íå íóëü.  À ïî
  321. îêîí÷àíèè ðàáîòû ñ íèì âûïîëíÿåì MUI_DisposeObject(app) - â ýòîì
  322. ñëó÷àå âñå äî÷åðíèå îáúåêòû áóäóò óäàëåíû àâòîìàòè÷åñêè.
  323.    Óäàëÿòü ìîæíî ÒÎËÜÊΠîáúåêòû, êîòîðûå íå ÿâëÿþòñÿ äî÷åðíèìè ïî
  324. îòíîøåíèþ ê êàêèì áû òî íè áûëî åù¸ îáúåêòàì.
  325.  
  326.    Â ïðîãðàììå ìîæåò áûòü è íåñêîëüêî îáúåêòîâ êëàññà Application.
  327. Íàïðèìåð, ýòî ïîçâîëèò îòêðûâàòü ðàçíûå Application íà ðàçíûõ ýêðàíàõ.
  328.  
  329.  
  330. 7) Êîìïîíîâêà îáúåêòîâ
  331.  
  332.    Åñëè òðåáóåòñÿ ÷òî-òî áîëåå ñëîæíîå, ÷åì ðàññìîòðåííàÿ ðàíåå êíîïêà
  333. â îêíå, íàì ïîòðåáóåòñÿ èñïîëüçîâàòü ãðóïïû.
  334.  
  335.    Ãðóïïà - ýòî ïðÿìîóãîëüíûé îáúåêò, êîòîðûé ñîäåðæèò äðóãèå îáúåêòû.
  336. Ãðóïïû ìîãóò áûòü òð¸õ âèäîâ - ãîðèçîíòàëüíûå, âåðòèêàëüíûå, è
  337. ñîäåðæàùèå îïðåäåë¸ííîå êîëè÷åñòâî êîëîíîê.  Îáúåêòû ðàçìåùàþòñÿ â
  338. ãðóïïå òàê æå, êàê ÿ÷åéêè â òàáëèöå.  Â ÿ÷åéêå ãðóïïû ìîæåò áûòü
  339. ðàçìåùåíà åù¸ îäíà ãðóïïà - êîëè÷åñòâî óðîâíåé âëîæåíèÿ îïÿòü æå íå
  340. îãðàíè÷åíî.
  341.  
  342.    Ðàññìîòðèì â êà÷åñòâå ïðèìåðà ñîçäàíèå ôàéëîâîãî ðåêâåñòîðà:
  343.  
  344.    ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯
  345.    ¢                                       ¢
  346.    ¢  ­¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¯ ­¡¡¡¡¡¡¯  ¢
  347.    ¢  ¢ C                (dir) ¢ ¢ dh0: ¢  ¢
  348.    ¢  ¢ Classes          (dir) ¢ ¢ dh1: ¢  ¢ è åù¸ ðàç
  349.    ¢  ¢ Devs             (dir) ¢ ¢ dh2: ¢  ¢ ê âîïðîñó
  350.    ¢  ¢ Expansion        (dir) ¢ ¢ df0: ¢  ¢ î ïîëüçå
  351.    ¢  ¢ ...                    ¢ ¢ df1: ¢  ¢ ïñåâäîãðàôèêè
  352.    ¢  ¢ Trashcan.info    1.172 ¢ ¢ df2: ¢  ¢
  353.    ¢  ¢ Utilities.info     632 ¢ ¢ ram: ¢  ¢ ;-)
  354.    ¢  ¢ WBStartup.info     632 ¢ ¢ rad: ¢  ¢
  355.    ¢  ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´ ¿¡¡¡¡¡¡´  ¢
  356.    ¢                                       ¢
  357.    ¢  Ïóòü: _____________________________  ¢
  358.    ¢                                       ¢
  359.    ¢  Ôàéë: _____________________________  ¢
  360.    ¢                                       ¢
  361.    ¢  ­¡¡¡¡¡¡¡¡¯               ­¡¡¡¡¡¡¡¡¯  ¢
  362.    ¢  ¢ Ãîòîâî ¢               ¢ Îòìåíà ¢  ¢
  363.    ¢  ¿¡¡¡¡¡¡¡¡´               ¿¡¡¡¡¡¡¡¡´  ¢
  364.    ¢                                       ¢
  365.    ¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´
  366.  
  367.    Â ýòîì ñëó÷àå ìû èìååì ñëåäóþùèå îáúåêòû:  ñïèñêè ñâåðõó ñïðàâà è
  368. ñëåâà, äâà ïîëÿ ââîäà ñòðîêè, è äâå êíîïêè ñíèçó.  Íóæíî êàê-òî
  369. ñâÿçàòü ìåæäó ñîáîé âñå ïåðå÷èñëåííûå îáúåêòû, ÷òîáû îíè ðàçìåñòèëèñü
  370. â îêíå â óêàçàííîì âèäå.  Äëÿ ýòîãî äâà ñïèñêà ñâåðõó è äâå êíîïêè
  371. ñíèçó îáúåäèíÿþòñÿ â ÃÎÐÈÇÎÍÒÀËÜÍÛÅ ÃÐÓÏÏÛ.  Âñ¸ îïèñàííîå
  372. ãðóïïèðóåòñÿ â ÂÅÐÒÈÊÀËÜÍÓÞ ÃÐÓÏÏÓ.
  373.  
  374.    VGroup,
  375.      Child, HGroup,
  376.        Child, FileListview(), // Êàòàëîã
  377.        Child, DeviceListview(), // Óñòðîéñòâà
  378.      End,
  379.      Child, PathGadget(), // Ïóòü
  380.      Child, FileGadget(), // Ôàéë
  381.      Child, HGroup,
  382.        Child, OkayButton(), // Ãîòîâ
  383.        Child, CancelButton(), // Îòìåíà
  384.      End,
  385.    End;
  386.  
  387.    Ãðóïïû ñ óêàçàííûì êîëè÷åñòâîì êîëîíîê (âåðòèêàëüíûå ãðóïïû - èõ
  388. ÷àñòíûé ñëó÷àé) çàïèñûâàþòñÿ êàê ColGroup(êîëè÷åñòâî_êîëîíîê) è èìåþò
  389. ñëåäóþùåå ñâîéñòâî: êîëè÷åñòâî îáúåêòîâ äîëæíî áûòü îáÿçàòåëüíî ðàâíî
  390. ïðîèçâåäåíèþ êîëè÷åñòâà ñòîëáöîâ è êîëè÷åñòâà ñòðîê.
  391.  
  392.    Ðàññìîòðåííûé ìåõàíèçì â íåêîòîðîé ìåðå ÿâëÿåòñÿ àíàëîãîì òàáëèö
  393. â HTML.  Êòî çíàêîì ñ HTML, ìîæåò îçíàêîìèòüñÿ ñ Custom-êëàññîì
  394. MCC_TableGroup, â êîòîðîì ñëîæíûå ãðóïïû ôîðìèðóþòñÿ áîëåå óäîáíûì
  395. ñïîñîáîì, ïðàêòè÷åñêè èäåíòè÷íûì ìåõàíèçìó HTML-òàáëèö.
  396.  
  397.  
  398. 8) Êîìïîíîâêà îáúåêòîâ áîëåå ïîäðîáíî
  399.  
  400.    Îáúåêòû, ðàçìåùàåìûå â ãðóïïå, ìîãóò èìåòü ÂÅÑ (MUIA_Weight).  Âåñ
  401. - ýòî ÷èñëî, õàðàêòåðèçóþùåå, êàêóþ ÷àñòü îáùåãî ïðîñòðàíñòâà ñëåäóåò
  402. âûäåëèòü îáúåêòó.  Åñëè âåñ îáúåêòà íå óêàçàí, ïî óìîë÷àíèþ îí
  403. ïðèíèìàåòñÿ ðàâíûì 100.  Âåñ ìîæåò áûòü óêàçàí ðàçäåëüíî ïî
  404. ãîðèçîíòàëè (MUIA_HorizWeight) è ïî âåðòèêàëè (MUIA_VertWeight).
  405.    Òàêèì îáðàçîì, åñëè ìû õîòèì èìåòü êíîïêó «Îòìåíà» âäâîå áîëåå
  406. øèðîêóþ, ÷åì êíîïêà «Ãîòîâî», íóæíî óêàçàòü åé âåñ 200.
  407.  
  408.    Ñóùåñòâóåò òàêæå ñïîñîá ðàññòàâëÿòü îáúåêòû «âðó÷íóþ» - íàïðèìåð,
  409. äëÿ íàïèñàíèÿ Web-áðàóçåðîâ, ãäå ðàñïîëîæåíèå êíîïîê îïðåäåëÿåòñÿ
  410. ñîäåðæàíèåì Web-ñòðàíèöû.  Äëÿ ýòîãî ïðèìåíÿåòñÿ àòðèáóò
  411. MUIA_LayoutHook êëàññà Group.  Ïðè ýòîì MUI áóäåò âûçûâàòü óêàçàííóþ
  412. ôóíêöèþ êàæäûé ðàç ïåðåä ðàçìåùåíèåì î÷åðåäíîãî îáúåêòà.
  413.  
  414.    Èíòåðâàëû ìåæäó îáúåêòàìè (spacing) îïðåäåëÿþòñÿ â íàñòðîéêàõ
  415. èíòåðôåéñà.  Åñëè äëÿ êîíêðåòíîé çàäà÷è íóæíî óñòàíîâèòü îïðåäåë¸ííûé
  416. èíòåðâàë (íàïðèìåð, äëÿ ðàçìåùåíèÿ ðÿäà êíîïîê âïëîòíóþ äðóã ê äðóãó),
  417. ãðóïïå ñ ýòèìè îáúåêòàìè óêàçûâàåòñÿ àòðèáóò MUIA_Group_Spacing ñ
  418. òðåáóåìûì çíà÷åíèåì (â íàøåì ïðèìåðå - íóëü).
  419.  
  420.    Åñòü âîçìîæíîñòü àâòîìàòè÷åñêîãî «èñ÷åçàíèÿ» îáúåêòà, åñëè îí íå
  421. óìåùàåòñÿ â èíòåðôåéñ (ïðèìåð - íàäïèñü ñïðàâà âíèçó â MCP Prefs).
  422. Äëÿ ýòîãî óêàçûâàþòñÿ àòðèáóòû MUIA_HorizDisappear (èñ÷åçàíèå, åñëè
  423. îáúåêò íå óìåùàåòñÿ ïî ãîðèçîíòàëè) è MUIA_VertDisappear (ïî
  424. âåðòèêàëè).  Çíà÷åíèå àòðèáóòà - «ñòåïåíü âàæíîñòè» îáúåêòà,
  425. îáúåêòû ñ íàèáîëüøèì çíà÷åíèåì èñ÷åçàþò â ïîñëåäíþþ î÷åðåäü.
  426.  
  427.  
  428. 9) Ñâÿçûâàíèå îáúåêòîâ è îáðàáîòêà ñîáûòèé
  429.  
  430.    Êîðíåâûì êëàññîì äåðåâà êëàññîâ MUI ÿâëÿåòñÿ êëàññ Notify.  Èìåííî
  431. îí ïðåäîñòàâëÿåò ýòó âîçìîæíîñòü.
  432.  
  433.    Ïîñëå ñîçäàíèÿ äåðåâà èíòåðôåéñà íàä ðÿäîì îáúåêòîâ ñëåäóåò
  434. âûïîëíèòü ìåòîä Notify.  Äëÿ ýòîãî äåëàåòñÿ âûçîâ ñëåäóþùåãî âèäà:
  435.  
  436.    DoMethod(îáúåêò1,MUIM_Notify,àòðèáóò,çíà÷åíèå,
  437.             îáúåêò2,êîëè÷åñòâî_àðãóìåíòîâ,ìåòîä,...)
  438.  
  439.    îáúåêò1 - òîò îáúåêò, èçìåíåíèå ñîñòîÿíèÿ êîòîðîãî ìû ñîáèðàåìñÿ
  440. îñëåæèâàòü.  Ïîñëå MUIM_Notify óêàçûâàåòñÿ îòñëåæèâàåìûé àòðèáóò, è òî
  441. çíà÷åíèå, ïðè óñòàíîâêå àòðèáóòà â êîòîðîå ñðàáàòûâàåò óñòàíàâëèâàåìàÿ
  442. íàìè ñâÿçü.
  443.  
  444.    îáúåêò2 - îáúåêò, íàä êîòîðûì ìû áóäåì ïðîèçâîäèòü äåéñòâèå â
  445. ñëó÷àå ñðàáàòûâàíèÿ ñâÿçè.  Êîëè÷åñòâî àðãóìåíòîâ - êîíñòàíòà,
  446. óêàçûâàþùàÿ, ñêîëüêî åù¸ àðãóìåíòîâ èä¸ò ïîñëå ýòîé êîíñòàíòû.  Ïðè
  447. ñðàáàòûâàíèè ñâÿçè ìîæåò áûòü âûïîëíåí ëþáîé ìåòîä, â òîì ÷èñëå ìåòîä
  448. MUIM_Set, óñòàíàâëèâàþùèé àòðèáóò.
  449.  
  450.    Ê ïðèìåðó, ìû õîòèì, ÷òîáû ïðè âñÿêîì íàæàòèè êíîïêè worst,
  451. radio-button clock áûë óñòàíîâëåí íà ïåðâóþ ïîçèöèþ.  Äëÿ ýòîãî ïîñëå
  452. ñîçäàíèÿ èíòåðôåéñà âûïîëíÿåì:
  453.  
  454.    DoMethod(worst,MUIM_Notify,MUIA_Pressed,FALSE,
  455.             clock,3,MUIM_Set,MUIA_Radio_Active,0);
  456.  
  457.    Îáðàáîòêà ñîáûòèé äåëàåòñÿ ðîâíî òàê æå. Åñòü íåñêîëüêî ñïîñîáîâ
  458. ïîëó÷èòü èíôîðìàöèþ î ñîáûòèè. Ïðèâåä¸ì òðè èç íèõ - ReturnIDs,
  459. Callback hook è Write Long.
  460.  
  461.    ReturnID ïðåäñòàâëÿåò ñîáîé ÷èñëî, âîçâðàùàåìîå DoMethod() â
  462. ãëàâíîì öèêëå MUI-ïðîãðàììû.  Ìîæíî çàïðîãðàììèðîâàòü íåñêîëüêî òàêèõ
  463. ÷èñåë íà ðàçíûå ñîáûòèÿ, è â çàâèñèìîñòè îò ÷èñëà âûïîëíÿòü ðàçíûå
  464. äåéñòâèÿ.  MUI óæå ïðåäîñòàâëÿåò MUIV_Application_ReturnID_Quit,
  465. êîòîðûé âîçâðàùàåòñÿ, â ÷àñòíîñòè, ïðè âûïîëíåíèè Remove èç ïðîãðàììû
  466. Exchange (ëþáîå MUI ïðèëîæåíèå, åñëè íå óêàçàíî èíîãî, ïî óìîë÷àíèþ
  467. ÿâëÿåòñÿ Commodity).  Åñëè ìû õîòèì ïîëó÷àòü òîò æå ReturnID ïðè
  468. íàæàòèè íà êíîïêó çàêðûòèÿ îêíà mainwin, ïèøåì ñëåäóþùåå:
  469.  
  470.    DoMethod(mainwin,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,app,2,
  471.      MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  472.  
  473.      ãäå app - îáúåêò Application.
  474.  
  475.    Callback hook ïðåäñòàâëÿåò ñîáîé ìåõàíèçì âûçîâà ïîëüçîâàòåëüñêèõ
  476. ôóíêöèé â ñëó÷àå âîçíèêíîâåíèÿ ñîáûòèé.  Äëÿ ýòîãî âûïîëíÿåòñÿ
  477. MUIM_CallHook ñ àðãóìåíòîì - óêàçàòåëåì íà ñòðóêòóðó Hook.
  478.  
  479.    MUIM_WriteLong ïîçâîëÿåò çàïèñàòü ÷èñëî ïî óêàçàííîìó àäðåñó â
  480. ïàìÿòè.  Ýòî ïîçâîëÿåò îòêàçàòüñÿ îò îáñëóæèâàíèÿ ñîáûòèé îò
  481. ýëåìåíòîâ, çàäàþùèõ ðåæèìû ðàáîòû, è òîëüêî â íóæíûé ìîìåíò
  482. ïðîàíàëèçèðîâàòü ñîñòîÿíèå óêàçàííûõ ÿ÷ååê ïàìÿòè.
  483.  
  484.    MUIM_WriteString  - òî æå ñàìîå äëÿ ñòðîê, à íå ëîíãîâ.
  485.  
  486.  
  487. 10) Äèíàìè÷åñêàÿ êîìïîíîâêà îáúåêòîâ
  488.  
  489.    Â ëþáîé ìîìåíò â ïðîöåññå ðàáîòû ïðèëîæåíèÿ åñòü âîçìîæíîñòü
  490. äèíàìè÷åñêè äîáàâèòü èëè îòîáðàòü ó êàêîãî-ëèáî îáúåêòà åãî äî÷åðíèå
  491. îáúåêòû. Äëÿ ýòîãî ñóùåñòâóþò ìåòîäû OM_ADDMEMBER è OM_REMMEMBER.
  492.    Íàïðèìåð, äëÿ äîáàâëåíèÿ îáúåêòà - êíîïêè Delete ê ôàéëîâîìó
  493. ðåêâåñòîðó íóæíî âûïîëíèòü
  494.  
  495.    DoMethod(group,OM_ADDMEMBER,SimpleButton("Óäàëèòü"));
  496.  
  497.    íàä ãðóïïîé, êîòîðàÿ áóäåò ñîäåðæàòü ýòó êíîïêó.
  498.  
  499.    Â ïðîöåññå âûïîëíåíèÿ ìåòîäà, åñëè îêíî áûëî îòêðûòî, èíòåðôåéñ
  500. ïåðåðèñóåòñÿ â ðåàëüíîì âðåìåíè è ê èìåþùèìñÿ êíîïêàì äîáàâèòñÿ íîâàÿ.
  501.  
  502.  
  503. 11) Îáùèé îáçîð ðåàëèçàöèè èíòåðôåéñà
  504.  
  505.    Ðàññìîòðèì ïîðÿäîê äåéñòâèé, íåîáõîäèìûõ äëÿ ïîñòðîåíèÿ ìèíèìàëüíîé
  506. ïðîãðàììû ïîä MUI.
  507.  
  508.    à) îòêðûâàåì muimaster.library è intuition.library
  509.       Intuition ïîòðåáóåòñÿ íàì äëÿ get() è set().
  510.    á) ñîçäà¸ì îáúåêò Application.
  511.    â) âûïîëíÿåì ðÿä âûçîâîâ DoMethod()
  512.       Çäåñü íóæíî âûïîëíèòü êàê ìèíèìóì ñëåäóþùèå äåéñòâèÿ:
  513.       - óñòàíîâèòü ñâÿçè
  514.       - îòêðûòü îêíî (îêíà).
  515.    ã) âûïîëíÿåì ìåòîä MUIM_Application_NewInput íàä îáúåêòîì
  516.       Application, ïåðåäàâ åìó óêàçàòåëü íà ïåðåìåííóþ sigs.
  517.    ä) ïðîâåðÿåì ðåçóëüòàò, êîòîðûé âîçâðàòèë DoMethod() - ýòî íóæíûé
  518.       íàì ReturnID.  Åñëè ýòî Quit - ïåðåõîäèì íà è)
  519.    å) àíàëèçèðóåì ïåðåìåííóþ sigs. Åñëè îíà ðàâíà íóëþ - ïåðåõîäèì
  520.       îáðàòíî íà ïóíêò ã)
  521.    æ) åñëè ïåðåìåííàÿ sigs íå ðàâíà íóëþ - sigs = Wait(sigs);
  522.    ç) âîçâðàùàåìñÿ íà ã)
  523.    è) óíè÷òîæàåì îáúåêò Application. Îêíà çàêðûâàþòñÿ àâòîìàòè÷åñêè.
  524.    ê) çàêðûâàåì áèáëèîòåêè.
  525.  
  526.  
  527. 12) Äîñòóïíûå êëàññû è èõ íàçíà÷åíèå
  528.  
  529. aboutmui.mui
  530.  
  531.    Ïðåäñòàâëÿåò ñîáîé îêîøêî, êîòîðîå îáû÷íî âûâîäèòñÿ ïðèëîæåíèÿìè ïî
  532. ïóíêòó ìåíþ «About MUI».
  533.  
  534. application.mui
  535.  
  536.    Ïðèëîæåíèå - êîðíåâîé îáúåêò äåðåâà, ðàññìîòðåííîãî ðàíåå.
  537.  
  538. area.mui
  539.  
  540.    Ïðÿìîóãîëüíàÿ îáëàñòü. Ýòî ñóïåðêëàññ ïðàêòè÷åñêè âñåõ êëàññîâ MUI.
  541. Èìååò íàáîð àòðèáóòîâ òèïà ðàçìåðîâ, êîîðäèíàò è ò.ï., íàñëåäóåìûõ
  542. áîëüøèíñòâîì îñòàëüíûõ êëàññîâ.
  543.  
  544. balance.mui
  545.  
  546.    Óïðàâëÿþùèé ýëåìåíò äëÿ balancing groups.  Ðàçìåùàåòñÿ â ëþáîì
  547. ìåñòå èíòåðôåéñà è ïîçâîëÿåò, «õâàòàÿñü» çà íåãî ìûøêîé, ïåðåäâèãàòü
  548. åãî, ìåíÿÿ ïðîïîðöèè ðàñïîëîæåííûõ ïî ñòîðîíàì îò íåãî îáúåêòîâ.
  549.  
  550. bitmap.mui
  551.  
  552.    Ïîçâîëÿåò èñïîëüçîâàòü êàðòèíêó, îïèñàííóþ ñòðóêòóðîé Bitmap.
  553.  
  554. bodychunk.mui
  555.  
  556.    Ïîçâîëÿåò èñïîëüçîâàòü êàðòèíêó â IFF ILBM ôîðìàòå.
  557.  
  558. boopsi.mui
  559.  
  560.    Èíòåðôåéñ äëÿ èñïîëüçîâàíèÿ ëþáûõ BOOPSI êëàññîâ â MUI èíòåðôåéñå,
  561. â ÷àñòíîñòè, ColorWheel, èñïîëüçóåìîãî ïðè íàñòðîéêå öâåòà.
  562.  
  563. coloradjust.mui
  564.  
  565.    Ýëåìåíò íàñòðîéêè öâåòà (íà kickstart 3.0 èñïîëüçóåò ColorWheel).
  566. Ïîçâîëÿåò âûáðàòü RGB è ÿðêîñòü.
  567.  
  568. colorfield.mui
  569.  
  570.    Èíäèêàòîð öâåòà.  Ïî ìåðå âîçìîæíîñòè îòîáðàæàåò â ïðÿìîóãîëüíèêå
  571. öâåò, çàäàííûé êîìïîíåíòàìè RGB.  Íà ks 2.x áóäåò ÷¸ðíûì.
  572.  
  573. cycle.mui
  574.  
  575.    Cycle gadget (êíîïêà ñ âûáîðîì âàðèàíòà)
  576.  
  577. dataspace.mui
  578.  
  579.    Êîíòåéíåð ïðîèçâîëüíîé èíôîðìàöèè.  Â ÷àñòíîñòè, èñïîëüçóåòñÿ MUI
  580. äëÿ õðàíåíèÿ íàñòðîåê.
  581.  
  582. dirlist.mui
  583.  
  584.    Ñïèñîê ôàéëîâ.  Ñàìîñòîÿòåëüíî ñ÷èòûâàåò äèðåêòîðèþ, ïîêàçûâàåò å¸
  585. ñîäåðæèìîå, ïîçâîëÿåò âûáèðàòü ñòðîêó.
  586.  
  587. family.mui
  588.  
  589.    Ñóïåðêëàññ äëÿ êëàññîâ, îïåðèðóþùèõ ñïèñêîì ñóáêëàññîâ.
  590. Èñïîëüçóåòñÿ äëÿ ìåíþ.
  591.  
  592. floattext.mui
  593.  
  594.    Ñóáêëàññ êëàññà list ñ âîçìîæíîñòüþ ôîðìàòèðîâàíèÿ àáçàöåâ ïî
  595. ïðàâîìó êðàþ.
  596.  
  597. gauge.mui
  598.  
  599.    Èñïîëüçóåòñÿ äëÿ progress-bar'îâ.  Ìîãóò áûòü êàê ãîðèçîíòàëüíûìè,
  600. òàê è âåðòèêàëüíûìè, è ñîäåðæàòü ñòðîêó.
  601.  
  602. group.mui
  603.  
  604.    Ãðóïïà (îïèñàíà ðàíåå)
  605.  
  606. image.mui
  607.  
  608.    Ïðîèçâîëüíàÿ êàðòèíêà, â òîì ÷èñëå èç ôàéëà ïî çàäàííîìó ïóòè.
  609. Ê ñîæàëåíèþ, òðåáóåò óêàçûâàòü æ¸ñòêî çàäàííîå ðàçðåøåíèå.
  610.  
  611. knob.mui
  612.  
  613.    Ýëåìåíò òèïà ðåãóëÿòîðà ãðîìêîñòè, âðàùàåìîãî ìûøêîé
  614.  
  615. levelmeter.mui
  616.  
  617.    Ñòðåëî÷íûé èíäèêàòîð
  618.  
  619. list.mui
  620.  
  621.    Ñïèñîê.  Îáû÷íî èñïîëüçóåòñÿ êàê äî÷åðíèé îáúåêò ó listview.
  622.  
  623. listview.mui
  624.  
  625.    Äîáàâëÿåò ê ñïèñêó óïðàâëÿþùèé ñêðîëëáàð è îáðàáîòêó ââîäà.
  626.  
  627. menu.mui
  628.  
  629.    Îáúåêò ïðåäñòàâëÿåò ñîáîé îäíî âûïàäàþùåå ìåíþ (ê ïðèìåðó, ìåíþ
  630. Project).
  631.  
  632. menuitem.mui
  633.  
  634.    Ïóíêò âûïàäàþùåãî ìåíþ.
  635.  
  636. menustrip.mui
  637.  
  638.    Ìåíþ â öåëîì (ìîæíî óñòàíàâëèâàòü enable/disable ãëîáàëüíî).
  639.  
  640. notify.mui
  641.  
  642.    Ñóïåðêëàññ âñåõ êëàññîâ MUI. Îáåñïå÷èâàåò ñâÿçûâàíèå îáúåêòîâ,
  643. îáðàáîòêó ñîáûòèé, à òàêæå ðÿä äðóãèõ ïîëåçíûõ ìîìåíòîâ.
  644.  
  645. numeric.mui
  646.  
  647.    Ñóïåðêëàññ äëÿ ëþáûõ ýëåìåíòîâ, îáåñïå÷èâàþùèõ ðàáîòó ñ öåëûìè
  648. ÷èñëàìè - íàïðèìåð, äëÿ knob.mui.  Ñàì ïî ñåáå íå ïðåäîñòàâëÿåò
  649. íèêàêèõ ñðåäñòâ GUI.
  650.  
  651. numericbutton.mui
  652.  
  653.    Êíîïêà âûáîðà ÷èñëà. Ïðåäñòàâëÿåò ñîáîé slider, «ñâ¸ðíóòûé» â
  654. êíîïêó äëÿ ýêîíîìèè ìåñòà.
  655.  
  656. palette.mui
  657.  
  658.    Ïîëíûé íàáîð ýëåìåíòîâ äëÿ íàñòðîéêè ïàëèòðû.
  659.  
  660. popasl.mui
  661.  
  662.    Ñóáêëàññ êëàññà popstring, ñàìîñòîÿòåëüíî âûçûâàþùèé asl.library
  663. äëÿ ðåêâåñòîðîâ ðàçíîãî ðîäà.  Ñîçäà¸ò äî÷åðíèé ïðîöåññ, áëàãîäàðÿ
  664. ÷åìó âûïîëíåíèå çàäà÷è ïðè âûçîâå ðåêâåñòîðà íå áëîêèðóåòñÿ.
  665.  
  666. poplist.mui
  667.  
  668.    Âûïàäàþùèé ñïèñîê ïðîèçâîëüíûõ îáúåêòîâ.
  669.  
  670. popobject.mui
  671.  
  672.    Ïîçâîëÿåò ñîçäàâàòü ëþáûå, âûïàäàþùèå ïî íàæàòèþ êíîïêè îáúåêòû.
  673.  
  674. popstring.mui
  675.  
  676.    Ñóïåðêëàññ äëÿ âûïàäàþùèõ îáúåêòîâ.  Ïîçâîëÿåò ñîçäàâàòü ñïèñîê
  677. ñòðîê è âûáèðàòü ñòðîêó.
  678.  
  679. prop.mui
  680.  
  681.    Àíàëîã propgadgets â intuition - äâèæîê, óïðàâëÿåìûé ìûøüþ.  Ìîæåò
  682. áûòü êàê ãîðèçîíòàëüíûì, òàê è âåðòèêàëüíûì.  Òàêæå ìîæåò èñïîëüçîâàòü
  683. áîðäþðû îêîí (êàê â Workbench).
  684.  
  685. radio.mui
  686.  
  687.    Radiobutton äëÿ âûáîðà íåñêîëüêèõ âàðèàíòîâ.
  688.  
  689. rectangle.mui
  690.  
  691.    «Ïóñòîå ìåñòî» äëÿ äèçàéíà èíòåðôåéñà.  Ìîæåò ñîäåðæàòü
  692. ãîðèçîíòàëüíóþ èëè âåðòèêàëüíóþ ïîëîñó-ðàçäåëèòåëü è íàäïèñü.
  693.  
  694. register.mui
  695.  
  696.    Óìåùàåò íåñêîëüêî îáúåêòîâ â îäíî è òî æå ïðîñòðàíñòâî ñ
  697. âîçìîæíîñòüþ âûáîðà, êàêîé èç íèõ ïîêàçûâàòü, ñ ïîìîùüþ «çàêëàäîê».
  698.  
  699. scale.mui
  700.  
  701.    Ïðîöåíòíàÿ øêàëà (îò 0 äî 100%). Îáû÷íî èñïîëüçóåòñÿ äëÿ Gauge.
  702.  
  703. scrollbar.mui
  704.  
  705.    Íàáîð èç propgadget-à è äâóõ êíîïîê ñî ñòðåëêàìè.
  706.  
  707. scrollgroup.mui
  708.  
  709.    Êëàññ äëÿ ïîääåðæêè ãîðèçîíòàëüíîé è âåðòèêàëüíîé ïðîêðóòêè
  710. «âèðòóàëüíîé» ãðóïïû.  Ïðèìåð - ñêðîëëèíã îêíà â IBrowse.
  711.  
  712. semaphore.mui
  713.  
  714.    Ñåìàôîð äëÿ ðàçãðàíè÷åíèÿ äîñòóïà ê dataspace îò ðàçíûõ çàäà÷.
  715.  
  716. slider.mui
  717.  
  718.    Ýëåìåíò äëÿ âûáîðà ÷èñëà ñ ïîìîùüþ «äâèæêà», óïðàâëÿåìîãî ìûøüþ.
  719.  
  720. string.mui
  721.  
  722.    Ïîëå ââîäà ñòðîêè.
  723.  
  724. text.mui
  725.  
  726.    Íàäïèñü ñ ðàçëè÷íûìè âîçìîæíîñòÿìè îôîðìëåíèÿ.
  727.  
  728. virtgroup.mui
  729.  
  730.    «Âèðòóàëüíàÿ» ãðóïïà, êîòîðàÿ ìîæåò áûòü áîëüøåãî ðàçìåðà, ÷åì
  731. âûäåëåí äëÿ í帠â èíòåðôåéñå.
  732.  
  733. volumelist.mui
  734.  
  735.    Ñïèñîê óñòðîéñòâ.
  736.  
  737. window.mui
  738.  
  739.    Êëàññ îêíà.
  740.  
  741.  
  742. 13) ßçûê îïèñàíèÿ èíòåðôåéñà áîëåå ïîäðîáíî
  743.  
  744.    Äëÿ òîãî, ÷òîáû íå ïèñàòü êàæäûé ðàç âðó÷íóþ âûçîâ ôóíêöèè
  745. MUI_NewObject() è èìÿ êëàññà, â mui.h îïðåäåë¸í íàáîð ìàêðîñîâ äëÿ
  746. äîñòóïà êî âñåì èìåþùèìñÿ êëàññàì. Òàêèì îáðàçîì, ñòðîêà òèïà
  747.  
  748.    êëàññObject
  749.  
  750.    ïðåîáðàçóåòñÿ â ñòðîêó
  751.  
  752.    MUI_NewObject(êëàññ
  753.  
  754.    Äàëåå ÷åðåç çàïÿòûå ïèøåòñÿ taglist.  Äëÿ åãî çàâåðøåíèÿ, êàê
  755. óïîìèíàëîñü, èñïîëüçóåòñÿ ìàêðîñ End, ðàçâîðà÷èâàþùèéñÿ â TAG_END).
  756.  
  757.    Ðàçóìååòñÿ, ïðèâåä¸ííûì âûøå ñïèñêîì ðàçíîîáðàçèå ýëåìåíòîâ
  758. èíòåðôåéñà íå îãðàíè÷èâàåòñÿ.  Íàïðèìåð, MUI íå èìååò ñïåöèàëüíîãî
  759. êëàññà «êíîïêà» - äëÿ ýòîãî îáû÷íî èñïîëüçóåòñÿ îáúåêò ëþáîãî
  760. ñóáêëàññà (íàïðèìåð, text.mui) êëàññà Area, ó êîòîðîãî óñòàíàâëèâàåòñÿ
  761. àòðèáóò MUIA_InputMode.  Òàêèì îáðàçîì êíîïêè ìîãóò ñîäåðæàòü íå
  762. òîëüêî íàäïèñè, íî è ëþáîé ïðàêòè÷åñêè ïðîèçâîëüíûé íàáîð îáúåêòîâ.
  763.  
  764.    ×àñòî èñïîëüçóåìûå ýëåìåíòû èíòåðôåéñà èìåþò óæå îïðåäåë¸ííûå
  765. ìàêðîñû ñ íàáîðîì ïàðàìåòðîâ, ñðàçó çàäàþùèå íåîáõîäèìûå àòðèáóòû.
  766. Ê ïðèìåðó, êíîïêà îïèñûâàåòñÿ êàê SimpleButton("íàäïèñü").
  767. Âñå îïðåäåë¸ííûå ýëåìåíòû ñ îïèñàíèåì ìîæíî íàéòè â ôàéëå mui.h.
  768.    Òàì æå îïðåäåëåíî ìíîæåñòâî äðóãèõ ìàêðîñîâ, â ÷àñòíîñòè, çàðàíåå
  769. îïðåäåë¸ííûå àòðèáóòû. Íàïðèìåð, äëÿ óêàçàíèÿ òèïà ðàìêè äëÿ êíîïêè
  770. âìåñòî MUIA_Frame, MUIV_Frame_Button äîñòàòî÷íî íàïèñàòü ButtonFrame.
  771.  
  772.  
  773. 14) Ïðèìåð ïðîñòåéøåé ïðîãðàììû
  774.  
  775.    Ñàìûé ïðîñòîé ñïîñîá ñäåëàòü ïåðâóþ ïðîãðàììó ïîä MUI - ñêîìïèëèòü
  776. ïðèâåä¸ííûé íèæå èñõîäíèê, «âüåõàòü», êàê îí ðàáîòàåò, ïîìåíÿòü è
  777. ñäåëàòü ÷òî-òî ñâî¸.  Èñõîäíèê ïî âîçìîæíîñòè ïðîêîììåíòèðîâàí.  Êàê
  778. òîëüêî ýòîãî âàðèàíòà ñòàíåò ìàëî - èçó÷àéòå èñõîäíèêè MUI Demos,
  779. ïðèëàãàåìûõ ê àðõèâó ñ äîêóìåíòàöèåé ïî MUI.
  780.    Ïðîãðàììà ïðîâåðåíà ïîä SAS/C 6.58 è Hisoft C 4.0.  Â óñòàíîâêàõ
  781. íåîáõîäèìî âûêëþ÷èòü ëèíêîâêó ñî ñòàðòàï-êîäîì.  Äëÿ Hisoft C íóæíî
  782. äîáàâèòü ê ïðîåêòó muistubs.lib.  Ïðîãðàììà çàïóñêàåòñÿ èç CLI.
  783.  
  784. #include <clib/exec_protos.h>
  785. #include <clib/muimaster_protos.h>
  786. #include <clib/dos_protos.h>
  787. #include <clib/alib_protos.h>
  788.  
  789. #ifdef __SASC
  790. #define VERDATE __AMIGADATE__
  791. #include <pragmas/exec_sysbase_pragmas.h>
  792. #include <pragmas/muimaster_pragmas.h>
  793. #include <pragmas/dos_pragmas.h>
  794. #define GetBaseReg()
  795. #else
  796. #define VERDATE "("__DATE2__")"
  797. #include <pragma/exec_lib.h>
  798. #include <pragma/muimaster_lib.h>
  799. #include <pragma/dos_lib.h>
  800. #include <linkerfunc.h>
  801. #define __saveds
  802. #endif
  803.  
  804. #include <libraries/mui.h>
  805. #include <dos/dos.h>
  806. #ifndef MAKE_ID
  807. #define MAKE_ID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16\
  808.                           | (ULONG) (c)<<8 | (ULONG) (d))
  809. #endif
  810.  
  811. enum {
  812. ReturnID_ButtonPressed = 1,
  813. ReturnID_ButtonReleased,
  814. ReturnID_StringEntered
  815. };
  816.  
  817. struct Library *MUIMasterBase, *IntuitionBase, *DOSBase, *SysBase;
  818.  
  819. __saveds main()
  820. {
  821.  GetBaseReg(); // ýòî äëÿ Hisoft C
  822.  SysBase = *((struct Library **)4L); // SysBase â ïåðåìåííóþ
  823.  if(DOSBase = OpenLibrary("dos.library",36))
  824.  {
  825.   if(IntuitionBase = OpenLibrary("intuition.library",39))
  826.   {
  827.    if(MUIMasterBase = OpenLibrary("muimaster.library",0))
  828.    {
  829.     Object *app, *win, *button, *string;
  830.     if(app = ApplicationObject,
  831.      MUIA_Application_Title, "Ïðîãðàììà",
  832.      MUIA_Application_Version, "$VER: Ïðîãðàììà 1.0 "VERDATE,
  833.      MUIA_Application_Copyright, "(C) 1999 Ïðîãðàììèíã Êîìïýíè",
  834.      MUIA_Application_Author, "Ïðîãðàììèñò",
  835.      MUIA_Application_Description, "Ïðîñòî êàêàÿ-òî ïðîãðàììà",
  836.      MUIA_Application_Base,"PROGRAM",
  837.      SubWindow, win = WindowObject,
  838.       MUIA_Window_Title, "Ïðîãðàììà",
  839.       MUIA_Window_ID, MAKE_ID('M','A','I','N'),
  840.       WindowContents, VGroup,
  841.        Child, button = SimpleButton("Íàæìè ìåíÿ"),
  842.        Child, string = String("Ââåäèòå òåêñò",40),
  843.       End,
  844.      End,
  845.     End)
  846.     {
  847.      unsigned long id, sigs = 0;
  848.      // Îòêðûâàåì îêíî
  849.      set(win,MUIA_Window_Open,TRUE);
  850.      // óñòàíàâëèâàåì ñâÿçü ìåæäó íàæàòèåì íà êíîïêó çàêðûâàíèÿ
  851.      // îêíà è âûõîäîì èç ïðîãðàììû
  852.      DoMethod(win,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,app,2,
  853.       MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  854.      // ñâÿçü ìåæäó íàæàòèåì êíîïêè è âîçâðàòîì ðåçóëüòàòà
  855.      DoMethod(button,MUIM_Notify,MUIA_Pressed,TRUE,
  856.       app,2,MUIM_Application_ReturnID,ReturnID_ButtonPressed);
  857.      // ñâÿçü ìåæäó îòïóñêàíèåì êíîïêè è âîçâðàòîì ðåçóëüòàòà
  858.      DoMethod(button,MUIM_Notify,MUIA_Pressed,FALSE,
  859.       app,2,MUIM_Application_ReturnID,ReturnID_ButtonReleased);
  860.      // ñâÿçü ìåæäó ââîäîì ñòðîêè è âîçâðàòîì ðåçóëüòàòà
  861.      DoMethod(string,MUIM_Notify,MUIA_String_Acknowledge,
  862.       MUIV_EveryTime, // ïðè âñÿêîì èçìåíåíèè ñîñòîÿíèÿ àòðèáóòà
  863.       app,2,MUIM_Application_ReturnID,ReturnID_StringEntered);
  864.      // îæèäàåì ñîáûòèÿ
  865.      while((id = DoMethod(app,MUIM_Application_NewInput,&sigs))
  866.      != MUIV_Application_ReturnID_Quit)
  867.      {
  868.       switch(id) // ïðîâåðÿåì âîçâðàù¸ííûé íàì ReturnID
  869.       {
  870.        case ReturnID_ButtonPressed:
  871.         Printf("Âû íàæàëè êíîïêó\n"); break;
  872.        case ReturnID_ButtonReleased:
  873.         Printf("Âû îòïóñòèëè êíîïêó\n"); break;
  874.        case ReturnID_StringEntered:
  875.        {
  876.         STRPTR res;
  877.         // ñ÷èòûâàåì óêàçàòåëü íà ñòðîêó â ïåðåìåííóþ
  878.         get(string,MUIA_String_Contents,&res);
  879.         Printf("Âû ââåëè ÷òî-òî òèïà <<%s>>\n",res);
  880.         break;
  881.        }
  882.       }
  883.       if (sigs)
  884.       {
  885.        // îæèäàåì ñèãíàëà
  886.        sigs = Wait(sigs | SIGBREAKF_CTRL_C);
  887.        // åñëè íàæàëè CTRL+C - âûõîäèì
  888.        if (sigs & SIGBREAKF_CTRL_C) break;
  889.       }
  890.      }
  891.      MUI_DisposeObject(app);
  892.     }
  893.     CloseLibrary(MUIMasterBase);
  894.    }
  895.    CloseLibrary(IntuitionBase);
  896.   }
  897.   CloseLibrary(DOSBase);
  898.  }
  899. }
  900.  
  901.  
  902. 15) Íåêîòîðûå âàæíûå ìîìåíòû
  903.  
  904.    Âàæíîå çàìå÷àíèå îòíîñèòåëüíî âûøå ïðèâåä¸ííîãî ïðèìåðà.  Ïðèíÿòî
  905. äåëàòü ðåàêöèþ íà ÎÒÏÓÑÊÀÍÈÅ, à íå íà ÍÀÆÀÒÈÅ êíîïêè - äëÿ òîãî, ÷òîáû
  906. ïîëüçîâàòåëü â ïîñëåäíèé ìîìåíò ñìîã îòêàçàòüñÿ îò íàæàòèÿ, è ÷òîáû
  907. íàæàòèå íå ïðîèçîøëî ñëó÷àéíî.  Îáðàáîòêà íàæàòèÿ ïðèâåäåíà ëèøü äëÿ
  908. òîãî, ÷òîáû ïðîèëëþñòðèðîâàòü òàêóþ âîçìîæíîñòü.
  909.  
  910.    MUI ðàáîòàåò â êîíòåêñòå âûçûâàþùåé çàäà÷è.  Ýòî îçíà÷àåò, ÷òî
  911. ïðîãðàììà îáÿçàíà çà ìèíèìàëüíîå âðåìÿ îòðåàãèðîâàòü íà ëþáîå
  912. ñëó÷èâøèåñÿ ñîáûòèå.  Åñëè ïðîãðàììà îòâëåêàåòñÿ íà îòðàáîòêó
  913. êàêîãî-ëèáî äåéñòâèÿ (íàïðèìåð, ÷èòàåò â ïàìÿòü î÷åíü áîëüøîé ôàéë),
  914. òî èíòåðôåéñ «óìèðàåò», íà âðåìÿ ïðåâðàùàÿñü â ñòàòè÷åñêóþ êàðòèíêó
  915. (÷òî ìîæíî íàáëþäàòü, íàïðèìåð, â YAM ïðè îæèäàíèè îòâåòà ñåðâåðà).
  916.    Åñòü äâà ñïîñîáà, êàê ýòî îáîéòè.  Ïåðâûé ñïîñîá ñâîäèòñÿ ê òîìó,
  917. ÷òî âî âðåìÿ äëèòåëüíîãî äåéñòâèÿ (ê ïðèìåðó, àðõèâàöèè) âðåìÿ îò
  918. âðåìåíè ïðîâåðÿòü, íå ïîñòóïèëè ëè êàêèå-ëèáî ñèãíàëû).  Âòîðîé ñïîñîá
  919. - ñîçäàòü äî÷åðíèé ïðîöåññ è ïîðó÷èòü ðàáîòó åìó, îáìåíèâàÿñü ñ íèì
  920. ñîîáùåíèÿìè.
  921.  
  922.    Ïîñëå ñîçäàíèÿ èíòåðôåéñà ÎÁßÇÀÒÅËÜÍΠíåîáõîäèìî ïðîâåðèòü, áóäóò
  923. ëè îêíà ïðîãðàììû óìåùàòüñÿ íà ýêðàí 640x200 ïðè ôîíòàõ 8x8 - ýòî
  924. îáùåå ïðàâèëî äëÿ âñåõ ïðîãðàìì, è MUI òóò íå èñêëþ÷åíèå.  Åñëè îêíî
  925. íå âëåçàåò â ýêðàí, MUI ïîïûòàåòñÿ çàìåíèòü øðèôòû íà Helvetica/9, à
  926. åñëè è ýòî íå ïîìîæåò, òî îêíî ïîïðîñòó íå îòêðîåòñÿ.  Ðàáîòà ñ íå
  927. îòêðûòûì îêíîì íå ÿâëÿåòñÿ îøèáêîé, âñå îïåðàöèè ïðè ýòîì âàëèäíû -
  928. íî, î÷åâèäíî, íèêàêîãî âçàèìîäåéñòâèÿ ñ ïîëüçîâàòåëåì ïðè ýòîì íå
  929. áóäåò.  ×òîáû èçáåæàòü ýòîé ñèòóàöèè, ïðîâåðÿéòå MUIA_Window_Open.
  930.  
  931.  
  932. 16) Custom classes è çà÷åì îíè íóæíû
  933.  
  934.    Custom-êëàññû ïðèìåíÿþòñÿ â òåõ ñëó÷àÿõ, êîãäà ñòàíäàðòíîãî íàáîðà
  935. êëàññîâ MUI íà÷èíàåò íå õâàòàòü.  Íàïðèìåð, åñëè íóæåí ýëåìåíò
  936. èíòåðôåéñà ñ õèòðûì âåêòîðíûì èçîáðàæåíèåì.
  937.    Custom-êëàññû áûâàþò äâóõ âèäîâ - public è private.
  938.  
  939.    Public custom class ïðåäñòàâëÿåò ñîáîé áèáëèîòåêó, êîòîðàÿ îáû÷íî
  940. êëàä¸òñÿ â mui:libs.  Îíè èìåþò èìåíà, îêàí÷èâàþùèåñÿ íå íà «.mui», à
  941. íà «.mcc» (MuiCustomClass).  Ðàáîòà ñ íèìè ïî ñóòè íå îòëè÷àåòñÿ îò
  942. ðàáîòû ñî ñòàíäàðòíûì íàáîðîì êëàññîâ.  Ìíîãèå êëàññû èìåþò ñâîè
  943. ñîáñòâåííûå íàñòðîéêè, êîòîðûå äîáàâëÿþòñÿ â ñïèñîê íàñòðîåê MUI Prefs
  944. - ýòè íàñòðîéêè òîæå ïðåäñòàâëÿþò ñîáîé áèáëèîòåêó, êîòîðàÿ êëàä¸òñÿ â
  945. mui:libs è îêàí÷èâàþòñÿ íà «.mcp» (íå ïóòàéòå ñ ïðîãðàììîé MCP).
  946.  
  947.    Private custom class ñóùåñòâóåò òîëüêî â ïðåäåëàõ Âàøåé ïðîãðàììû.
  948. Ôàêòè÷åñêè ýòî âñåãî ëèøü îäíà ôóíêöèÿ - òàê íàçûâàåìûé äèñïåò÷åð
  949. êëàññà.  Ýòà ôóíêöèÿ ïîëó÷àåò óïðàâëåíèå âñÿêèé ðàç, êîãäà âûïîëíÿåòñÿ
  950. êàêîé-ëèáî ìåòîä, è ïîëó÷àåò â êà÷åñòâå àðãóìåíòà êðîìå âñåãî ïðî÷åãî
  951. óêàçàòåëè íà îáúåêò è íà âûïîëíÿåìûé ìåòîä.  ×àñòü ìåòîäîâ è àòðèáóòîâ
  952. êëàññ îáðàáàòûâàåò ñàì, âñ¸ îñòàëüíîå, ïðî ÷òî îí íå çíàåò, îí ïðîñòî
  953. ïåðåäà¸ò «âûøåñòîÿùåìó» êëàññó ôóíêöèåé DoSuperMethod().
  954.    Ïîñêîëüêó ó private-êëàññà íåò èìåíè, îáúåêòû ýòîãî êëàññà
  955. ñîçäàþòñÿ âûçîâîì íå MUI_NewObject(), à NewObject() èç Intuition.
  956.  
  957.    Â êà÷åñòâå ïðèìåðà ñìîòðèòå èñõîäíèêè MUI Demos (Class#?.c).
  958.  
  959.  
  960. 17) Íå ðàññìîòðåííûå ðàíåå ôóíêöèè muimaster.library
  961.  
  962. MUI_SetError()
  963. MUI_Error()
  964.  
  965.    Óñòàðåâøèå ôóíêöèè, âìåñòî íèõ ðåêîìåíäóåòñÿ ïðèìåíÿòü SetIOErr() è
  966. IOErr() dos.library.
  967.  
  968. MUI_AllocAslRequest()
  969. MUI_AslRequest()
  970. MUI_FreeAslRequest()
  971.  
  972.    Èíòåðôåéñ ê asl.library.  Â MUI-ïðîãðàììàõ íåîáõîäèìî èñïîëüçîâàòü
  973. èìåííî ýòè ôóíêöèè âìåñòî ôóíêöèé asl.library, reqtools.library etc -
  974. ïîñêîëüêó â äàííîì ñëó÷àå MUI èìååò âîçìîæíîñòü îáðàáàòûâàòü,
  975. íàïðèìåð, ñâîðà÷èâàíèå ïðîãðàììû â èêîíêó, çàêðûâàÿ âñå îêíà.
  976.  
  977. MUI_CreateCustomClass()
  978. MUI_DeleteCustomClass()
  979.  
  980.    Ðåãèñòðàöèÿ è óäàëåíèå custom-êëàññîâ - êàê private, òàê è public
  981. (â ïîñëåäíåì ñëó÷àå âûçûâàþòñÿ èç ñëóæåáíûõ ôóíêöèé áèáëèîòåêè).
  982. Ïðè ñîçäàíèè êëàññà ïåðåäà¸òñÿ óêàçàòåëü íà ôóíêöèþ-äèñïåò÷åð, áàçó
  983. áèáëèîòåêè äëÿ public êëàññîâ, ñóïåðêëàññ, è ðàçìåð data-ñòðóêòóðû.
  984.  
  985. MUI_FreeClass()
  986. MUI_GetClass()
  987.  
  988.    Óñòàðåâøèå ôóíêöèè, âìåñòî íèõ ïðèìåíÿéòå âûøåóïîìÿíóòûå.
  989.  
  990. MUI_MakeObjectA()
  991.  
  992.    Àíàëîã MUI_NewObject().  Îòëè÷àåòñÿ áîëåå êîìïàêòíûì âûçîâîì -
  993. ôóíêöèè ïåðåäà¸òñÿ ÊÎÄ ñîçäàâàåìîãî îáúåêòà (íå ñòðîêà!) è íàáîð
  994. ïàðàìåòðîâ (íå taglist!), ñïåöèôè÷íûé äëÿ îáúåêòà.  Ñîçäà¸ò ðÿä
  995. çàðàíåå îïðåäåë¸ííûõ îáúåêòîâ, â îñíîâíîì èñïîëüçóåòñÿ â ìàêðîñàõ,
  996. îïðåäåë¸ííûõ â mui.h.
  997.    Ëþáîé âûçîâ äàííîé ôóíêöèè ìîæíî çàìåíòü àíàëîãè÷íûì âûçîâîì
  998. MUI_NewObject(), íî íå íàîáîðîò.
  999.  
  1000. MUI_ObtainPen()
  1001. MUI_ReleasePen()
  1002.  
  1003.    Àíàëîãè ôóíêöèé graphics.library (äîñòóïíûõ òîëüêî íà v39+), íî
  1004. ðàáîòàþò è íà v36.
  1005.  
  1006. MUI_Redraw()
  1007.  
  1008.    Ôóíêöèÿ âûçûâàåòñÿ ÒÎËÜÊΠèç custom classes.  Íàçíà÷åíèå ñëåäóþùåå:
  1009. åñëè â êàêîé-òî ìîìåíò âðåìåíè îáúåêò íóæíî ïåðåðèñîâàòü (íàïðèìåð,
  1010. èçìåíèëèñü àòðèáóòû), âìåñòî ðèñîâàíèÿ åãî êëàññ äîëæåí âûçâàòü ýòó
  1011. ôóíêöèþ.  MUI ïðîèçâåä¸ò ðàñ÷¸ò âñåõ íåîáõîäèìûõ êîîðäèíàò è îáëàñòåé
  1012. îòñå÷åíèÿ (äëÿ virtual-ãðóïï), ïîñëå ÷åãî âûïîëíèò ìåòîä MUIM_Draw.
  1013.    Ðèñîâàíèå â îêíî ìîæíî âûïîëíÿòü ÒÎËÜÊΠïðè ïîëó÷åíèè MUIM_Draw!
  1014.  
  1015. MUI_Request()
  1016.  
  1017.    MUI-ðåêâåñòåð, àíàëîã EasyRequest().  Âûçîâ MUI_Request() áëîêèðóåò
  1018. îáðàáîòêó èíòåðôåéñà.
  1019.  
  1020. MUI_RejectIDCMP()
  1021. MUI_RequestIDCMP()
  1022.  
  1023.    Ôóíêöèè äëÿ custom-êëàññîâ.  Èñïîëüçóþòñÿ êëàññàìè, îáðàáàòûâàþùèìè
  1024. ââîä - ñîáûòèÿ îò êëàâèàòóðû è ìûøè.  Ïîñêîëüêó äàëåêî íå âñåì
  1025. îáúåêòàì òðåáóåòñÿ îáðàáîòêà ââîäà, äëÿ óìåíüøåíèÿ íàêëàäíûõ ðàñõîäîâ
  1026. íà «øèðîêîâåùàòåëüíóþ» ðàññûëêó ñîáûòèé ýòè ñîáûòèÿ ðàññûëàþòñÿ òîëüêî
  1027. çàïðîñèâøèì èõ êëàññàì.
  1028.    Çàïðàøèâàòü âåñüìà êðèòè÷íûå ïî âðåìåíè ñîáûòèÿ (IDCMP_INTUITICKS,
  1029. IDCMP_MOUSEMOVE) èìååò ñìûñë òîëüêî íà òî âðåìÿ, ïîêà îíè òðåáóþòñÿ.
  1030.  
  1031.  
  1032. 18) Áîëåå ïîäðîáíî î custom-êëàññàõ
  1033.  
  1034.    MUI ðàáîòàåò ñ îáúåêòàìè ðàçëè÷íûõ êëàññîâ ïóò¸ì âûïîëíåíèÿ
  1035. ñïåöèôè÷íîãî íàáîðà ìåòîäîâ.  ×àñòü èç ìåòîäîâ îáÿçàòåëüíî äîëæíà áûòü
  1036. ðåàëèçîâàíà â ëþáîì custom-êëàññå, îñòàëüíûå æå íåîáÿçàòåëüíû.
  1037.    Êàê ëþáîé BOOPSI îáúåêò, MUI-îáúåêò ñîçäà¸òñÿ âûïîëíåíèåì ìåòîäà
  1038. OM_NEW.  Ïîñêîëüêó îáúåêòû â MUI ñîçäàþòñÿ îò áîëåå ìåëêèõ ê áîëåå
  1039. êðóïíûì, ê ìîìåíòó ñîçäàíèÿ îáúåêò åù¸ íè÷åãî íå «çíàåò» î ñâîéñòâàõ
  1040. äèñïëåÿ.
  1041.    Êîãäà âñå îáúåêòû ñîçäàíû, MUI âûïîëíÿåò ìåòîä MUIM_Setup, ðàññûëàÿ
  1042. îáúåêòàì èíôîðìàöèþ î ýêðàíå, øðèôòàõ è ò.ï.  Îêîí íà ýòîò ìîìåíò åù¸
  1043. íå ñóùåñòâóåò.
  1044.    Ñëåäóþùèé ìåòîä, ðàññûëàåìûé MUI - MUIM_AskMinMax.  Ýòî çàïðîñ
  1045. îáúåêòà î åãî ðàçìåðàõ - ìàêñèìàëüíîì, ìèíèìàëüíîì è ïî óìîë÷àíèþ.
  1046. Âûïîëíåíèå ýòîãî ìåòîäà îáÿçàòåëüíî, åñëè Âû íå õîòèòå ïîëó÷èòü
  1047. ïðÿìîóãîëüíèê íóëåâîãî ðàçìåðà ;)
  1048.    Ïîñëå ðàñ÷¸òà âñåõ ïîëîæåíèé è êîîðäèíàò MUI ãîòîâ ê îòêðûòèþ îêíà.
  1049. Êàê òîëüêî îêíî îòêðûòî, MUI ðàññûëàåò ìåòîä MUIM_Show, ãîâîðÿùèé î
  1050. ñóùåñòâîâàíèè îêíà.  MUIM_Show - ýòî åù¸ íå êîìàíäà íàðèñîâàòü ÷òî-òî
  1051. â îêíå.  Îáû÷íî îí èñïîëüçóåòñÿ äëÿ äîáàâëåíèÿ Intuition gadgets ê
  1052. îêíó.
  1053.    È íàêîíåö, ìåòîä MUIM_Draw ãîâîðèò î òîì, ÷òî íóæíî ïðèñòóïèòü ê
  1054. ðèñîâàíèþ.  Âñÿêîå ïîëó÷åíèå MUIM_Draw äîëæíî çàïóñòèòü ïåðåðèñîâêó
  1055. îáúåêòà - îíà òðåáóåòñÿ íå òîëüêî ïðè îòêðûòèè îêíà, íî è ïðè ðåôðåøå,
  1056. à òàêæå ïðè íåîáõîäèìîñòè îòîáðàçèòü ñëåäóþùóþ ôàçó ó ðÿäà ýëåìåíòîâ
  1057. èíòåðôåéñà (ê ïðèìåðó, ñëåäóþùèé êàäð âèäåî â îêíå).
  1058.    Êîãäà èçìåíÿåòñÿ ðàçìåð îêíà, MUI ïîñëåäîâàòåëüíî âûïîëíÿåò
  1059. MUIM_Hide, MUIM_Show è MUIM_Draw.
  1060.  
  1061.    Ïðè çàâåðøåíèè ðàáîòû âñ¸ ïðîèçâîäèòñÿ â îáðàòíîì ïîðÿäêå.  Ïåðåä
  1062. çàêðûòèåì îêíà âûïîëíÿþòñÿ MUIM_Hide.  Åñëè íóæíî âûéòè èç ïðîãðàììû,
  1063. èëè ïðîñòî ïåðåíåñòè å¸ íà äðóãîé ýêðàí - âûïîëíÿåòñÿ MUIM_Cleanup.
  1064.    Ïîñëåäíåå, ÷òî ïîëó÷èò îáúåêò - OM_DISPOSE.
  1065.  
  1066.    Âñþ ïîñëåäîâàòåëüíîñòü äåéñòâèé ìîæíî ïðåäñòàâèòü ñëåäóþùèì
  1067. îáðàçîì.  Çàêëþ÷¸ííûå â ôèãóðíûå ñêîáêè ôðàãìåíòû ÿâëÿþòñÿ öèêëàìè -
  1068. ìîãóò âûïîëíÿòüñÿ îäèí ðàç è áîëåå, à ìîãóò è íå âûïîëíèòüñÿ âîîáùå
  1069.  
  1070.    OM_NEW; // çäåñü Âû åù¸ íè÷åãî íå çíàåòå î äèñïëåéíîì îêðóæåíèè
  1071.    {
  1072.      MUIM_Setup; // èíôîðìàöèÿ î äèñïëåå
  1073.      MUIM_AskMinMax; // îïðîñ ðàçìåðîâ
  1074.      // çäåñü îòêðûâàåòñÿ îêíî
  1075.      {
  1076.        MUIM_Show; // äîáàâèòü ê îêíó, åù¸ íå ðèñîâàòü
  1077.        {
  1078.           MUIM_Draw; // íàðèñîâàòü
  1079.        }
  1080.        MUIM_Hide; // óäàëèòü èç îêíà
  1081.      }
  1082.      // çäåñü îêíî çàêðûâàåòñÿ
  1083.      MUIM_Cleanup; // îñâîáîæäàåì âñå äèñïëåéíî-çàâèñèìûå äàííûå
  1084.    }
  1085.    OM_DISPOSE; // óíè÷òîæàåì îáúåêò
  1086.  
  1087.  
  1088.    [to be continued]
  1089.  
  1090.